def f1(a, b, *c, d, e):
    print(a, b, c, d, e)

#f1(1, 2, 3, 4, 5)        # TypeError: f() missing 2 required keyword-only arguments: 'd' and 'e'
f1(1, 2, 3, 4, 5, d=4, e=5)


def f2(a, b, *c, d=4, e=5):
    print(a, b, c, d, e)

print()
f2(1, 2, 3)


def f3(a, b, *args, d=4, e=5, **kwargs):
    print(a, b, args, d, e, kwargs)

print()
f3(1, 2)
f3(1, 2, 3, 4, 5)
f3(1, 2, 3, 4, 5, d=6)
f3(1, 2, 3, 4, 5, f=7)

def f4(a, b, *, c, d):
    print(a, b, c, d)

#f4(1, 2, 3, 4)          # TypeError: f4() takes 2 positional arguments but 4 were given
f4(1, 2, c=3, d=4)